﻿using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApp_core
{
    /// <summary>
    /// 错误的使用方式。
    /// </summary>
    public class ExceptionSomeWrongUse
    {
        //见过公司类似这样写代码的：（控制器）

        /*
        public ActionResult EditSomeThing(Model model)
        {
            try
            {
                if (model.field1)
                {
                    throw new Exception("field1 cann't be null");
                }
                //or do someThing .then the exception happen.
                return JsonResult(new { code = "Sucess",messae="" });
            }
            catch (Exception ex)
            {
                Log.Logging("EditSomeThing",ex);//这里记个日志
                return JsonResult(new { code = "Fail", messae = ex.Message });
            }
        }
        */


        /* 以上代码：业务逻辑的判断，系统报错，都统一抛出，并捕获后处理返回。
         * 看似没问题。运行也很不错。
         * 但是这样的代码：严重不整洁，杂乱，一个try从头包到尾。违背了设计模式上的，模式框架只做框架。 业务的代码只负责业务。
         * 1.那么，这样的代码多个Controller/Ation,那么有多少这样的代码。
         * 2.如果引入日志记录系统(比如ExceptionLess)，用于记录日志，和捕获系统所有的异常
         *      那么这些人为的异常，就会当作系统异常记录起来。
         */

        /*以上的代码正确的打开方式是：
         * 1.建立MVC全局异常filter（AOP）,异常统一 return.
         * 2.去除这种try catch代码。
         * 3.业务代码严禁使用throw Exception("XXXX不能为空什么的").
         * 4.系统和业务，分开。系统异常交给ExceptionLess日志。业务的逻辑，自行返回。
         */

        public void Show()
        {
            ApplicationException applicationException = new ApplicationException("test");
            throw applicationException;
        }
    }
}
